@node Unsafe C macros
@section Unsafe C macros

All of the C functions & macros described previously verify that their
arguments have the appropriate types and lie in the appropriate ranges.
The following macros are identical to their safe counterparts, except
that the unsafe variants, by contrast, do @emph{not} verify coherency
of their arguments.  They are provided for the purpose of writing more
efficient code; their general use is not recommended.

@deftypefn {C macro} char S48_UNSAFE_EXTRACT_CHAR (s48_value @var{char})
@deftypefnx {C macro} {char *} S48_UNSAFE_EXTRACT_STRING (s48_value @var{string})
@deftypefnx {C macro} long S48_UNSAFE_EXTRACT_INTEGER (s48_value @var{integer})
@deftypefnx {C macro} double S48_UNSAFE_EXTRACT_DOUBLE (s48_value @var{double})
@deftypefnx {C macro} long S48_UNSAFE_EXTRACT_FIXNUM (s48_value @var{fixnum})
@deftypefnx {C macro} s48_value S48_UNSAFE_ENTER_FIXNUM (long @var{integer})
@end deftypefn
@*
@deftypefn {C macro} s48_value S48_UNSAFE_CAR (s48_value @var{pair})
@deftypefnx {C macro} s48_value S48_UNSAFE_CDR (s48_value @var{pair})
@deftypefnx {C macro} void S48_UNSAFE_SET_CAR (s48_value @var{pair}, s48_value @var{value})
@deftypefnx {C macro} void S48_UNSAFE_SET_CDR (s48_value @var{pair}, s48_value @var{value})
@end deftypefn
@*
@deftypefn {C macro} long S48_UNSAFE_VECTOR_LENGTH (s48_value @var{vector})
@deftypefnx {C macro} s48_value S48_UNSAFE_VECTOR_REF (s48_value @var{vector}, long @var{index})
@deftypefnx {C macro} void S48_UNSAFE_VECTOR_SET (s48_value @var{vector}, long @var{index}, s48_value @var{value})
@end deftypefn
@*
@deftypefn {C macro} long S48_UNSAFE_STRING_LENGTH (s48_value @var{string})
@deftypefnx {C macro} char S48_UNSAFE_STRING_REF (s48_value @var{string}, long @var{index})
@deftypefnx {C macro} void S48_UNSAFE_STRING_SET (s48_value @var{string}, long @var{index}, char @var{char})
@end deftypefn
@*
@deftypefn {C macro} void S48_UNSAFE_SYMBOL_TO_STRING (s48_value @var{symbol})
@end deftypefn
@*
@deftypefn {C macro} long S48_UNSAFE_BYTE_VECTOR_LENGTH (s48_value @var{bytev})
@deftypefnx {C macro} char S48_UNSAFE_BYTE_VECTOR_REF (s48_value @var{bytev}, long @var{index})
@deftypefnx {C macro} void S48_UNSAFE_BYTE_VECTOR_SET (s48_value @var{bytev}, long @var{index}, char @var{byte})
@end deftypefn
@*
@deftypefn {C macro} s48_value S48_UNSAFE_SHARED_BINDING_REF (s48_value @var{shared_binding})
@deftypefnx {C macro} int S48_UNSAFE_SHARED_BINDING_IS_IMPORTP (s48_value @var{shared_binding})
@deftypefnx {C macro} s48_value S48_UNSAFE_SHARED_BINDING_NAME (s48_value @var{shared_binding})
@deftypefnx {C macro} void S48_UNSAFE_SHARED_BINDING_SET (s48_value @var{shared_binding}, s48_value @var{value})
@end deftypefn
@*
@deftypefn {C macro} @var{type} S48_UNSAFE_EXTRACT_VALUE (s48_value @var{bytev}, @var{type})
@deftypefnx {C macro} {@var{type} *} S48_UNSAFE_EXTRACT_VALUE_POINTER (s48_value @var{bytev}, @var{type})
@deftypefnx {C macro} void S48_UNSAFE_SET_VALUE (s48_value @var{bytev}, @var{type}, @var{type} @var{value})
@end deftypefn
